package org.ventura.sistemafinanciero.entity;

// Generated 02-may-2014 11:48:28 by Hibernate Tools 4.0.0

import java.math.BigInteger;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

import org.ventura.sistemafinanciero.entity.type.TipoEmpresa;

/**
 * PersonaJuridica generated by hbm2java
 */
@Entity
@Table(name = "PERSONA_JURIDICA", schema = "BDSISTEMAFINANCIERO")
@XmlRootElement(name = "personanatural")
@XmlAccessorType(XmlAccessType.NONE)
@NamedQueries({
		@NamedQuery(name = PersonaJuridica.FindAll, query = "SELECT p FROM PersonaJuridica p"),
		@NamedQuery(name = PersonaJuridica.FindByTipoAndNumeroDocumento, query = "SELECT p FROM PersonaJuridica p WHERE p.tipoDocumento.idTipoDocumento = :idtipodocumento AND p.numeroDocumento = :numerodocumento"),
		@NamedQuery(name = PersonaJuridica.FindByFilterText, query = "SELECT p FROM PersonaJuridica p WHERE p.numeroDocumento like :filtertext OR UPPER(p.razonSocial) LIKE :filtertext") })
public class PersonaJuridica implements java.io.Serializable {

	private static final long serialVersionUID = 1L;

	public final static String FindByTipoAndNumeroDocumento = "PersonaJuridica.FindByTipoAndNumeroDocumento";
	public final static String FindByFilterText = "PersonaJuridica.FindByFilterText";
	public final static String FindAll = "PersonaJuridica.FindAll";

	private BigInteger idPersonaJuridica;
	private TipoDocumento tipoDocumento;
	private PersonaNatural representanteLegal;
	private String numeroDocumento;
	private String razonSocial;
	private String nombreComercial;
	private Date fechaConstitucion;
	private String actividadPrincipal;
	private String direccion;
	private String referencia;
	private String telefono;
	private String celular;
	private String email;
	private TipoEmpresa tipoEmpresa;
	private Integer finLucro;
	private String ubigeo;
	private Set socios = new HashSet(0);
	private Set accionistas = new HashSet(0);

	public PersonaJuridica() {
	}

	public PersonaJuridica(BigInteger idPersonaJuridica,
			TipoDocumento tipoDocumento, TipoEmpresa tipoEmpresa,
			boolean finLucro) {
		this.idPersonaJuridica = idPersonaJuridica;
		this.tipoDocumento = tipoDocumento;
		this.tipoEmpresa = tipoEmpresa;
		this.finLucro = (finLucro ? 1 : 0);
	}

	public PersonaJuridica(BigInteger idPersonaJuridica,
			TipoDocumento tipoDocumento, PersonaNatural personaNatural,
			String numeroDocumento, String razonSocial, String nombreComercial,
			Date fechaConstitucion, String direccion, String referencia,
			String telefono, String celular, String email,
			TipoEmpresa tipoEmpresa, boolean finLucro, String ubigeo,
			Set socios, Set accionistas) {
		this.idPersonaJuridica = idPersonaJuridica;
		this.tipoDocumento = tipoDocumento;
		this.representanteLegal = personaNatural;
		this.numeroDocumento = numeroDocumento;
		this.razonSocial = razonSocial;
		this.nombreComercial = nombreComercial;
		this.fechaConstitucion = fechaConstitucion;
		this.direccion = direccion;
		this.referencia = referencia;
		this.telefono = telefono;
		this.celular = celular;
		this.email = email;
		this.tipoEmpresa = tipoEmpresa;
		this.finLucro = (finLucro ? 1 : 0);
		this.ubigeo = ubigeo;
		this.socios = socios;
		this.accionistas = accionistas;
	}

	@XmlElement(name = "id")
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Id
	@Column(name = "ID_PERSONA_JURIDICA", unique = true, nullable = false, precision = 22, scale = 0)
	public BigInteger getIdPersonaJuridica() {
		return this.idPersonaJuridica;
	}

	public void setIdPersonaJuridica(BigInteger idPersonaJuridica) {
		this.idPersonaJuridica = idPersonaJuridica;
	}

	@XmlElement
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_TIPO_DOCUMENTO", nullable = false)
	public TipoDocumento getTipoDocumento() {
		return this.tipoDocumento;
	}

	public void setTipoDocumento(TipoDocumento tipoDocumento) {
		this.tipoDocumento = tipoDocumento;
	}

	@XmlElement
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_REPRESENTANTE_LEGAL")
	public PersonaNatural getRepresentanteLegal() {
		return this.representanteLegal;
	}

	public void setRepresentanteLegal(PersonaNatural representanteLegal) {
		this.representanteLegal = representanteLegal;
	}

	@XmlElement
	@Column(name = "NUMERO_DOCUMENTO", length = 20, columnDefinition = "nvarchar2")
	public String getNumeroDocumento() {
		return this.numeroDocumento;
	}

	public void setNumeroDocumento(String numeroDocumento) {
		this.numeroDocumento = numeroDocumento;
	}

	@XmlElement
	@Column(name = "RAZON_SOCIAL", length = 150, columnDefinition = "nvarchar2")
	public String getRazonSocial() {
		return this.razonSocial;
	}

	public void setRazonSocial(String razonSocial) {
		this.razonSocial = razonSocial;
	}

	@XmlElement
	@Column(name = "NOMBRE_COMERCIAL", length = 100, columnDefinition = "nvarchar2")
	public String getNombreComercial() {
		return this.nombreComercial;
	}

	public void setNombreComercial(String nombreComercial) {
		this.nombreComercial = nombreComercial;
	}

	@XmlElement
	@Column(name = "ACTIVIDAD_PRINCIPAL", length = 70, columnDefinition = "nvarchar2")
	public String getActividadPrincipal() {
		return actividadPrincipal;
	}

	public void setActividadPrincipal(String actividadPrincipal) {
		this.actividadPrincipal = actividadPrincipal;
	}

	@XmlElement
	@Temporal(TemporalType.DATE)
	@Column(name = "FECHA_CONSTITUCION", length = 7)
	public Date getFechaConstitucion() {
		return this.fechaConstitucion;
	}

	public void setFechaConstitucion(Date fechaConstitucion) {
		this.fechaConstitucion = fechaConstitucion;
	}

	@XmlElement
	@Column(name = "DIRECCION", length = 140, columnDefinition = "nvarchar2")
	public String getDireccion() {
		return this.direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	@XmlElement
	@Column(name = "REFERENCIA", length = 140, columnDefinition = "nvarchar2")
	public String getReferencia() {
		return this.referencia;
	}

	public void setReferencia(String referencia) {
		this.referencia = referencia;
	}

	@XmlElement
	@Column(name = "TELEFONO", length = 40, columnDefinition = "nvarchar2")
	public String getTelefono() {
		return this.telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	@XmlElement
	@Column(name = "CELULAR", length = 40, columnDefinition = "nvarchar2")
	public String getCelular() {
		return this.celular;
	}

	public void setCelular(String celular) {
		this.celular = celular;
	}

	@XmlElement
	@Column(name = "EMAIL", length = 40, columnDefinition = "nvarchar2")
	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	@XmlElement
	@Enumerated(EnumType.STRING)
	@Column(name = "TIPO_EMPRESA", nullable = false, length = 30, columnDefinition = "nvarchar2")
	public TipoEmpresa getTipoEmpresa() {
		return this.tipoEmpresa;
	}

	public void setTipoEmpresa(TipoEmpresa tipoEmpresa) {
		this.tipoEmpresa = tipoEmpresa;
	}

	@XmlElement
	@Column(name = "FIN_LUCRO", nullable = false, precision = 22, scale = 0)
	public Boolean getFinLucro() {
		if(this.finLucro == null)
			return null;
		else if(this.finLucro == 1)
			return true;
		else
			return false;		
	}

	public void setFinLucro(Boolean finLucro) {
		if(finLucro == null)
			this.finLucro = null;
		else
			this.finLucro = (finLucro ? 1 : 0);
	}

	@XmlElement
	@Column(name = "UBIGEO", length = 12, columnDefinition = "nvarchar2")
	public String getUbigeo() {
		return this.ubigeo;
	}

	public void setUbigeo(String ubigeo) {
		this.ubigeo = ubigeo;
	}

	@XmlTransient
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "personaJuridica")
	public Set<Socio> getSocios() {
		return this.socios;
	}

	public void setSocios(Set socios) {
		this.socios = socios;
	}

	@XmlElement
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "personaJuridica")
	public Set<Accionista> getAccionistas() {
		return this.accionistas;
	}

	public void setAccionistas(Set accionistas) {
		this.accionistas = accionistas;
	}

}
